]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
focus-manager: Add navigate_from_event method
authorTanner Doshier <doshitan@gmail.com>
Sat, 4 May 2013 01:31:51 +0000 (20:31 -0500)
committerJasper St. Pierre <jstpierre@mecheye.net>
Sat, 4 May 2013 03:20:02 +0000 (23:20 -0400)
This will be used to implement key navigation inside the calendar without
having to listen to key events manually.

https://bugzilla.gnome.org/show_bug.cgi?id=667434

src/st/st-focus-manager.c
src/st/st-focus-manager.h

index e12ec4689906f672bd08f9cdb8f2926e14492fd9..e7166dd26001f988bc59520ba6a62786e1ff0180 100644 (file)
@@ -233,3 +233,26 @@ st_focus_manager_get_group (StFocusManager *manager,
 
   return ST_WIDGET (actor);
 }
+
+/**
+ * st_focus_manager_navigate_from_event:
+ * @manager: the #StFocusManager
+ * @event: a #ClutterEvent
+ *
+ * Try to navigate from @event as if it bubbled all the way up to
+ * the stage. This is useful in complex event handling situations
+ * where you want key navigation, but a parent might be stopping
+ * the key navigation event from bubbling all the way up to the stage.
+ *
+ * Returns: Whether a new actor was navigated to
+ */
+gboolean
+st_focus_manager_navigate_from_event (StFocusManager *manager,
+                                      ClutterEvent   *event)
+{
+  if (event->type != CLUTTER_KEY_PRESS)
+    return FALSE;
+
+  ClutterActor *stage = CLUTTER_ACTOR (event->key.stage);
+  return st_focus_manager_stage_event (stage, event, manager);
+}
index e708f48402c7dd09aa8e0579dc33b5eb9e5d772f..d4b9551ba8578355d82b0c126512ad9d00a7862e 100644 (file)
@@ -75,6 +75,8 @@ void            st_focus_manager_remove_group  (StFocusManager *manager,
                                                 StWidget       *root);
 StWidget       *st_focus_manager_get_group     (StFocusManager *manager,
                                                 StWidget       *widget);
+gboolean        st_focus_manager_navigate_from_event (StFocusManager *manager,
+                                                      ClutterEvent   *event);
 
 G_END_DECLS